Node.js 易受两个HTTP请求走私漏洞影响
编译:代码卫士
Node.js 是一种可使 JavaScript 在浏览器中执行的服务器端技术,是越来越流行的web 应用开发和托管方式。HTTP 请求走私干扰的是网站处理用户HTTP请求序列的方式。
这两个漏洞是由瑞典皇家理工学院计算机科学专业的两名本科生 Mattias Grenfeldt 和 Asta Olofsson 在撰写毕业论文时发现的,之后投给 IEEE EDOC 2021 大会。
Grenfeldt 表示,“我们开始在六个开源 web 服务器和六个开源代理中查找HTTP请求走私漏洞。虽然Node 是其中之一,但最初并未从中发现任何问题。一段时间后,在报告其它问题时,我们发现了这两个问题。”
第一个漏洞的编号是CVE-2021-22959,由于标头中存在多个空格,HTTP 解析器接收的请求在标头名称之后和冒号之前存在一个空格,导致HTTP 请求走私漏洞的产生。
Grenfeldt 表示,“这是一种典型的HRS技术。Node 将‘Content-Length : 5’ 解释为 ‘Content-Length: 5’。如果结合使用忽略这类标头的代理使用,但以不修改的方式转发,则就可能触发HRS。之前出现过很多类似问题。有意思的是,Regilero 之前也曾将这个问题还有其它问题告知Node,之后这些问题被统一分配编号CVE-2016-2086。除了这里提到的空格+冒号问题外,其它问题都予以修复。”
第二个漏洞CVE-2021-22960 似乎表示的是一种新型HRS技术:结合所调查的其中一个代理中的不良行终止问题和Node 中不正确的块扩展解析问题,可导致请求走私。
这两名研究员发现,该易受攻击的代理查找单行换行 (LF) 字符终止包含块大小的行但未果,并像往常一样检查LF之前是否存在一个回车键。
Grenfeldt 解释称,“就在行终止之前,就是存放很少使用的块扩展特性的地方。在块扩展中,可以在块大小之后指定其它参数如 ‘a=b’。然而,这种解析很少在系统中执行,在很多情况下就只是允许字节进入该区域。”
他还指出,“结合这两个漏洞,我们就能构建一个块主体:代理解释和 Node 解释的方法不同。我们还在所调查的其它三种服务中发现了同样的服务器行为,使得它成为我们发现的最严重问题。”
这两名研究员在6月19日和20日报告了这两个问题,Node 在10月12日发布了修复方案。
下载量达数百万次的NodeJS 模块被曝代码注入漏洞
GitHub 在热门 Node.js changelog 开源库Standard Version中发现 RCE 漏洞
Apache 紧急修复已遭利用且补丁不完整的 HTTP Server 0day
开源的代理服务器HAProxy 易遭严重的 HTTP 请求走私攻击
https://portswigger.net/daily-swig/node-js-was-vulnerable-to-a-novel-http-request-smuggling-technique
题图:Pixabay License
本文由奇安信编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。
奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的产品线。